﻿@using DatabaseLibrary;
@* Quitar esta sección si se utilizan agrupaciones *@
@section Scripts {
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
    <script src="~/Scripts/jquery.timepicker.js"></script>

    <script type="text/javascript">
        $(document).ready(function () {            
            $('#fechaNacimiento').datetimepicker({ dateFormat: "yy-mm-dd" });
            $("#Cbo_empresa option[value='jquery']").attr("disabled", "disabled");
        });
    </script>
}

@{
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "FModificar datos de usuarios.";

    // Inicializar variables de página generales

    var identificacion = string.Empty;
    var nombres = string.Empty;
    var apellidos = string.Empty;
    var Cbo_genero = string.Empty;
    var fechaNacimiento = string.Empty;
    DateTime fNac = DateTime.MinValue;
    var Cbo_empresa = string.Empty;
    var Cbo_tDoc = string.Empty;

    WebImage photo = null;
    var newFileName = string.Empty;
    var imagePath = string.Empty;

    Validation.Add("foto",
        Validator.Regex(@"^.*\.(jpg|png)$", "Tipo de archivo invalido. Extensiones permitidas jpg y png")
    );

    Validation.Add("identificacion", Validator.StringLength(maxLength: 15, errorMessage: "El texto supera el maximo permitido de 15 caracteres."));
    Validation.Add("nombres", Validator.StringLength(maxLength: 100, errorMessage: "El texto supera el maximo permitido de 100 caracteres."));
    Validation.Add("apellidos", Validator.StringLength(maxLength: 100, errorMessage: "El texto supera el maximo permitido de 100 caracteres."));

    Validation.Add("identificacion",
        Validator.Integer("Este campo debe contener solo numeros."));   
    
    // se requiere que el usuario este logueado.        
    WebSecurity.RequireAuthenticatedUser();

    // Si esta es una solicitud  POST , valide y procese los datos
    if (IsPost)
    {
        AntiForgery.Validate();

        Cbo_tDoc = Request.Form["Cbo_tDoc"];
        identificacion = Request.Form["identificacion"];
        nombres = Request.Form["nombres"];
        apellidos = Request.Form["apellidos"];
        Cbo_genero = Request.Form["Cbo_genero"];
        Cbo_empresa = Request.Form["Cbo_empresa"];
        fechaNacimiento = Request.Form["fechaNacimiento"];

        if (Cbo_tDoc.IsEmpty() || Cbo_tDoc.Equals("0"))
        {
            ModelState.AddError("Cbo_tDoc", "Debe seleccionar un tipo documento.");
        }
        if (identificacion.IsEmpty())
        {
            ModelState.AddError("identificacion", "El campo identificacion no debe estar vacio.");
        }

        if (nombres.IsEmpty())
        {
            ModelState.AddError("nombres", "El campo nombre no debe estar vacio.");
        }
        if (apellidos.IsEmpty())
        {
            ModelState.AddError("apellidos", "El campo apellido no debe estar vacio.");
        }

        if (Cbo_genero.IsEmpty() || Cbo_genero.Equals("0"))
        {
            ModelState.AddError("Cbo_genero", "Debe seleccionar un genero.");
        }

        if (Cbo_empresa.IsEmpty())
        {
            ModelState.AddError("Cbo_empresa", "Debe seleccionar una empresa.");
        }

        if (fechaNacimiento.IsEmpty())
        {
            ModelState.AddError("fechaNacimiento", "El campo fechaNacimiento no debe estar vacio.");
        }
        else
        {
            fNac = DateTime.Parse(fechaNacimiento);

            if (fNac >= DateTime.Now)
            {
                ModelState.AddError("fechaNacimiento", "Por favor revise la fecha de nacimiento.");
            }
        }


        // Si toda la información es válida, crear una nueva cuenta
        if (Validation.IsValid())
        {

            // guardamos la imagen
            photo = WebImage.GetImageFromRequest();
            if (photo != null)
            {
                newFileName = identificacion;
                imagePath = @"imagenes\" + newFileName + "." + photo.ImageFormat;

                photo.Resize(300, 253);
                photo.Save(@"~\" + imagePath);
            }
            else if (!string.IsNullOrEmpty(Request.Form["image"]))
            {
                imagePath = Request.Form["image"].ToString();
            }

            ServicioGenerico<usuario> servicioActualizarUsuario = new ServicioGenerico<usuario>();

            servicioActualizarUsuario.entidad.id_Usuario = Convert.ToInt32(Membership.GetUser().ProviderUserKey.ToString());
            servicioActualizarUsuario.entidad.id_tipo_documento = Convert.ToInt32(Cbo_tDoc);
            servicioActualizarUsuario.entidad.identificacion = Convert.ToInt32(identificacion);
            servicioActualizarUsuario.entidad.nombres = nombres;
            servicioActualizarUsuario.entidad.apellidos = apellidos;
            servicioActualizarUsuario.entidad.genero = Cbo_genero;
            servicioActualizarUsuario.entidad.id_Empresa = Convert.ToInt32(Cbo_empresa);
            servicioActualizarUsuario.entidad.fecha_nacimiento = Convert.ToDateTime(fechaNacimiento);
            servicioActualizarUsuario.entidad.ruta_imagen = imagePath;

            EstadoTransaccion resultado = servicioActualizarUsuario.actualizar();

            if (EstadoTransaccion.ERRONEO.Equals(resultado))
            {
                ModelState.AddError("errorGeneral", servicioActualizarUsuario.mensaje);
            }
            else
            {
                ModelState.AddError("errorGeneral", servicioActualizarUsuario.mensaje);
                Response.Redirect("Manage.cshtml");
            }

        }
    }
    else
    {

        ServicioGenerico<usuario> servicioListarUsuario = new ServicioGenerico<usuario>();
        servicioListarUsuario.entidad.id_Usuario = Convert.ToInt32(Membership.GetUser().ProviderUserKey.ToString());
        servicioListarUsuario.entidad.fecha_nacimiento = Convert.ToDateTime(null);

        usuario objUsuario = new usuario();
        objUsuario = servicioListarUsuario.filtrar().FirstOrDefault();

        Cbo_tDoc = objUsuario.id_tipo_documento.ToString();
        identificacion = objUsuario.identificacion.ToString();
        nombres = objUsuario.nombres;
        apellidos = objUsuario.apellidos;
        Cbo_genero = objUsuario.genero;
        Cbo_empresa = objUsuario.id_Empresa.ToString();
        fechaNacimiento = objUsuario.fecha_nacimiento.ToShortDateString();
        imagePath = @"..\" + objUsuario.ruta_imagen;
    } 
}

<form method="post" enctype="multipart/form-data">
    @AntiForgery.GetHtml()
    @* Si existe al menos un error de validación, informar al usuario *@
    @Html.ValidationSummary("No se creó la cuenta. Corrija los errores e inténtelo de nuevo.", excludeFieldErrors: true, htmlAttributes: null)

    <fieldset>
        <legend>Modificar usuario.</legend>
        <ol class="round">
            <li class="one">
                <h5>Modificar datos del usuario.</h5>
                En este modulo se usted podra modificar su informacion personal.                            
            </li>


            <li class="email">

                <label for="Cbo_tDoc" @if (!ModelState.IsValidField("Cbo_tDoc"))
                                      {<text>class="error-label"</text>}>
                    Tipo documento
                </label>
                <select id="Cbo_tDoc" name="Cbo_tDoc" @Validation.For("Cbo_tDoc")>
                    @{ 
                        ServicioGenerico<tipo_documento> servicioListarTDoc = new ServicioGenerico<tipo_documento>();

                        List<tipo_documento> lstTDoc = new List<tipo_documento>();
                        lstTDoc = servicioListarTDoc.listar();

                        foreach (var elementTDoc in lstTDoc)
                        {
                            if (elementTDoc.id_tipo_documento.Equals(Cbo_tDoc))
                            {
                        @:<option value="@elementTDoc.id_tipo_documento" selected="selected"> @elementTDoc.nombre </option>
                                        }
                            else
                            {                                        
                        @:<option value="@elementTDoc.id_tipo_documento"> @elementTDoc.nombre </option>
                                        }
                        }
                    }
                </select>
                @Html.ValidationMessage("Cbo_tDoc")
            </li>

            <li class="email">
                <label for="identificacion" @if (!ModelState.IsValidField("identificacion"))
                                            {<text>class="error-label"</text>}>
                    Identificacion</label>
                <input type="text" id="identificacion" name="identificacion" value="@identificacion" @Validation.For("identificacion") />                
                @* Escribir los errores de validación del correo electrónico en la página *@
                @Html.ValidationMessage("identificacion")
            </li>

            <li class="email">
                <label for="nombres" @if (!ModelState.IsValidField("nombres"))
                                     {<text>class="error-label"</text>}>
                    Nombres
                </label>
                <input type="text" id="nombres" name="nombres" value="@nombres" @Validation.For("nombres") />                
                @* Escribir los errores de validación del correo electrónico en la página *@
                @Html.ValidationMessage("nombres")
            </li>

            <li class="email">
                <label for="apellidos" @if (!ModelState.IsValidField("apellidos"))
                                       {<text>class="error-label"</text>}>
                    Apellidos
                </label>
                <input type="text" id="apellidos" name="apellidos" value="@apellidos" @Validation.For("apellidos") />                
                @* Escribir los errores de validación del correo electrónico en la página *@
                @Html.ValidationMessage("apellidos")
            </li>

            <li class="email">
                <label for="Cbo_genero" @if (!ModelState.IsValidField("Cbo_genero"))
                                        {<text>class="error-label"</text>}>
                    Genero
                </label>
                <select id="Cbo_genero" name="Cbo_genero" @Validation.For("Cbo_genero")>
                    <option value="0">Seleccione</option>
                    @if (Cbo_genero.Trim().Equals("M"))
                    {
                        @: <option value="M" selected="selected">Masculino</option>
                        @: <option value="F">Femenino</option>
                                }
                    else
                    {
                        @: <option value="M">Masculino</option>
                        @: <option value="F" selected="selected">Femenino</option>
                                }
                </select>
                @Html.ValidationMessage("Cbo_genero")
            </li>

            <li class="email">
                <label for="Cbo_empresa" @if (!ModelState.IsValidField("Cbo_empresa"))
                                         {<text>class="error-label"</text>}>
                    Empresa
                </label>
                <select id="Cbo_empresa" name="Cbo_empresa" @Validation.For("Cbo_empresa") >
                    @{ 
                        ServicioGenerico<empresa> servicioListarEmpresa = new ServicioGenerico<empresa>();
                        servicioListarEmpresa.entidad.estado = true;

                        List<empresa> lstEmpresa = new List<empresa>();
                        lstEmpresa = servicioListarEmpresa.filtrar();

                        foreach (var elementEmpresa in lstEmpresa)
                        {
                            if (elementEmpresa.id_empresa.Equals(int.Parse(Cbo_empresa)))
                            {
                        @:<option value="@elementEmpresa.id_empresa" selected="selected"> @elementEmpresa.nombre </option>
                                        }
                            else
                            {
                        @:<option value="@elementEmpresa.id_empresa"> @elementEmpresa.nombre </option>
                                        }
                        }
                    }
                </select>
                @Html.ValidationMessage("Cbo_empresa")
            </li>

            <li class="email">
                <label for="fechaNacimiento" @if (!ModelState.IsValidField("fechaNacimiento"))
                                             {<text>class="error-label"</text>}>
                    Fecha nacimiento
                </label>
                <input type="text" name="fechaNacimiento" id="fechaNacimiento" value="@fechaNacimiento" readonly="true"
                                        size="12" @Validation.For("fechaNacimiento") />                
                @* Escribir los errores de validación del correo electrónico en la página *@
                @Html.ValidationMessage("fechaNacimiento")
            </li>

            <li class="email">
                @if (imagePath != "")
                {
                    <img id="fotoImg" src="@imagePath"  alt="foto usuario" width="300px" />
                }

                <label for="foto" @if (!ModelState.IsValidField("foto"))
                                  {<text>class="error-label"</text>}>
                    Foto
                </label>
                <input type="file" id="foto" name="foto" />
                @Html.ValidationMessage("foto")
            </li>
            @Html.ValidationMessage("errorGeneral")
        </ol>

        <input type="hidden" id="image" name="image" value="@imagePath" />

        <input type="submit" value="Actualizar" />
    </fieldset>
</form>
